package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.SituacaoProcesso;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="situacaoProcessoFaces")
@ViewScoped
public class SituacaoProcessoFaces extends FacesUtil {
	
	private static final long serialVersionUID = -4877895928870364236L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<SituacaoProcesso> logicaSituacaoProcesso;
	
	private SituacaoProcesso situacaoProcesso = new SituacaoProcesso();
	private List<SituacaoProcesso> listaSituacaoProcesso = new ArrayList<>();
	private String situacaoProcessoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaSituacaoProcesso.adicionar(situacaoProcesso);
				adicionarMensagem("Situacao do Processo adicionada com sucesso");
				this.buscarSituacaoProcesso();
				fecharModal("dialogSituacaoProcesso");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Situacao do Processo");
		}
	}
	
	public void prepararAdicionar() {
		this.situacaoProcesso = new SituacaoProcesso();
		abrirModal("dialogSituacaoProcesso");
	}
	
	public void selecionarRegistro(Long idSituacaoProcesso, boolean editar) {
		try {
			this.situacaoProcesso = logicaSituacaoProcesso.obterPorId(SituacaoProcesso.class,idSituacaoProcesso);
			
			if (editar) {
				abrirModal("dialogSituacaoProcesso");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaSituacaoProcesso.editar(this.situacaoProcesso);
				adicionarMensagem("Situacao do Processo editada com sucesso");
				fecharModal("dialogSituacaoProcesso");
				this.buscarSituacaoProcesso();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Situacao do Processo");
		}
	}
	
	public void remover() {
		try {
			logicaSituacaoProcesso.remover(SituacaoProcesso.class, this.situacaoProcesso.getId());
			adicionarMensagem("Situacao do Processo removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarSituacaoProcesso();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Situacao do Processo");
		}
	}
	
	public void buscarSituacaoProcesso() {
		if (listaSituacaoProcesso != null) {
			this.listaSituacaoProcesso.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(situacaoProcessoBusca)) {
				this.listaSituacaoProcesso =  logicaSituacaoProcesso.buscarTodos(SituacaoProcesso.class, "situacao");
			} else {
				this.listaSituacaoProcesso = logicaSituacaoProcesso.buscarPorCampo(SituacaoProcesso.class, "situacao", situacaoProcessoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.situacaoProcesso.getSituacao())) {
			adicionarMensagem("O campo número situação é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaSituacaoProcesso(DefaultLogicaContract<SituacaoProcesso> logicaSituacaoProcesso) {
		this.logicaSituacaoProcesso = logicaSituacaoProcesso;
	}

	public List<SituacaoProcesso> getListaSituacaoProcesso() {
		return listaSituacaoProcesso;
	}

	public void setListaSituacaoProcesso(List<SituacaoProcesso> listaSituacaoProcesso) {
		this.listaSituacaoProcesso = listaSituacaoProcesso;
	}

	public String getSituacaoProcessoBusca() {
		return situacaoProcessoBusca;
	}

	public void setSituacaoProcessoBusca(String SituacaoProcessoBusca) {
		this.situacaoProcessoBusca = SituacaoProcessoBusca;
	}

	public SituacaoProcesso getSituacaoProcesso() {
		return situacaoProcesso;
	}

	public void setSituacaoProcesso(SituacaoProcesso SituacaoProcesso) {
		this.situacaoProcesso = SituacaoProcesso;
	}
	
	
}